package com.lou1052.core.serializer;

import java.io.InputStream;
import java.io.OutputStream;

/**
 * 序列化借口
 * Created with IntelliJ IDEA.
 * User: liuqing
 * Date: 2015/10/18
 * Time: 8:46
 * To change this template use File | Settings | File Templates.
 */
public interface Serializer {
    /**
     * 序列化器名称 标识
     * @return
     */
    String name();
    /**
     * 序列化具体对象对象（不包含类型信息，读取时需要指定类型）
     * @param object
     * @return
     */
     byte[] serData(Object object);

    /**
     * 反序列化对象（不包含类型信息，读取时需要指定类型）
     * @param data
     * @param clazz
     * @param <T>
     * @return
     */
    <T> T deserData(byte[] data, Class<T> clazz);

    /**
     * 读取对象（不包含类型信息，读取时需要指定类型）
     * @param stream
     * @param clazz
     * @param <T>
     * @return
     */
    <T>T readData(InputStream stream, Class<T> clazz);

    /**
     * 写入对象（不包含类型信息，读取时需要指定类型）
     * @param stream
     * @param toWrite
     */
    void writeData(OutputStream stream, Object toWrite);

    /**
     * 序列化对象（包含类型信息，读取时不需要指定类型）
     * @param object
     * @return
     */
    byte[] serObject(Object object);

    /**
     * 反序列化对象（包含类型信息，读取时不需要指定类型）
     * @param data
     * @return
     */
    Object deserObject(byte[] data);

    /**
     * 读取对象（包含类型信息，读取时不需要指定类型）
     * @param stream
     * @return
     */
    Object readObject(InputStream stream);

    /**
     * 写入对象（包含类型信息，读取时不需要指定类型）
     * @param stream
     * @param toWrite
     */
    void writeObject(OutputStream stream, Object toWrite);

}








